2.12 Do ... Loop
 
Die Do ... Loop-Schleife kann kopfgesteuert oder fußgesteuert sein. Die Bedingung kann am Anfang oder am Ende abgefragt werden. Die Syntax der kopfgesteuerten Schleife lautet:
Do [While] [Until] Bedingung
Anweisungen
[Exit Do]
Anweisungen
Loop
Die Syntax der kopfgesteuerten Schleife lautet:
Do
Anweisungen
[Exit Do]
Anweisungen
Loop [While] [Until]
Mit While oder Until wird eine Bedingung überprüft. Ist die While-Bedingung korrekt, beziehungsweise die Until-Bedingung nicht korrekt, wird weitergearbeitet, im umgekehrten Fall wird die Schleife verlassen.
Der Unterschied zwischen der Zählerschleife und der Bedingungsschleife liegt darin, dass beim ersten Typ die Anzahl der Durchläufe schon feststeht. Ist die Anzahl unklar oder ändert sich innerhalb der Schleife, dann ist einer der folgenden Typen zu verwenden. Nun ein kleines Beispiel, um das Beschriebene zu verdeutlichen:
Eine Schnecke sitzt vor einer 9 Meter hohen Mauer. Jeden Tag klettert sie einen Meter nach oben, in jeder Nacht rutscht sie 10 % ihrer Gesamthöhe nach unten. Wann ist sie oben?
Also: Sie beginnt bei 0 Meter, klettert am ersten Tag auf 1,0 Meter, rutscht um 0,1 m nach unten, sodass sie den zweiten Tag bei 0,9 m beginnt. Von dort klettert sie auf 1,9 m, um in der folgenden Nacht auf 1,9 m - 0,19 m = 1,71 m zu landen. Dann klettert sie auf 2,71 m und rutscht auf 2,439 m herunter. Und so weiter. Die Rekursion lässt sich gut in eine Schleife einbauen:
Sub Schneckenproblem()
Dim intTage As Integer
Dim dblMorgenhöhe As Double
Dim dblAbendhöhe As Double
dblMorgenhöhe = 0
dblAbendhöhe = 0
intTage = 0
Do While dblAbendhöhe < 9
intTage = intTage + 1
dblAbendhöhe = dblMorgenhöhe + 1
dblMorgenhöhe = dblAbendhöhe * 0.9
Loop
MessageBox.Show("Die Schnecke benötigt " & _
intTage.ToString & " Tage."
End Sub
Das Ergebnis soll hier nicht angezeigt werden! Zwei Erläuterungen: Die Zahlen müssen nach der US-amerikanischen Konvention mit »0.9« und nicht mit »0,9« eingegeben werden. Wenn 10 % abgezogen werden, so kann man statt
dblMorgenhöhe = dblAbendhöhe - _
dblAbendhöhe * 0.1
auch schreiben
dblMorgenhöhe = dblAbendhöhe * 0.9
denn schließlich interessiert Sie nicht, wie weit die Schnecke herunterrutscht, sondern wo sie landet. Das heißt: Statt 10 % abzuziehen, kann man auch die übrigen 90 % berechnen. Während des Schleifendurchlaufs zählt ein Zähler (hier: »Tage«) mit, der dann in der Meldungsbox ausgegeben wird. Wann ist die Schnecke oben? Nicht am Ende der Nacht - das heißt, sie rutscht nicht von 10,00 Meter auf 9,00 Meter (denn die Mauer ist schließlich nur 9,00 Meter hoch), sondern sie klettert am Tag von 8,00 Metern auf 9,00 hoch. Und diese Höhe muss abgefangen werden - hier über die Variable »Abendhöhe«. Denn: 10,00 Meter erreicht unsere Schnecke nie!
Deshalb: Achtung vor Endlosschleifen. Dann bleibt nur noch der »Ausstieg« aus dem Programm, indem Sie in VB.NET auf den Beenden-Button klicken.
|